package com.shujia.scala

import scala.io.{BufferedSource, Codec, Source}

object Demo35Fun {
  def main(args: Array[String]): Unit = {

    /**
      * 函数柯里化
      *
      */

    def fun(x: Int)(y: Int): Int = {
      x * y
    }

    val i: Int = fun(100)(200)

    println(i)

    //可以先传第一个参数，会返回一个新的函数
    val f: Int => Int = fun(100)

    println(f(100))
    println(f(200))
    println(f(300))


    /**
      * 函数柯里化和隐式转换变量结合起来使用
      *
      */

    //隐式转换变量
    //当一个作用域中只能存在一个同类型的隐式转换变量
    implicit val num: Int = 100

    def fun2(x: Int)(implicit y: Int): Int = x * y

    println(fun2(2)(3))

    //会自动将当前作用域中Int类型的隐式转换变量赋值给y
    println(fun2(2))


    //应用
    val source: BufferedSource = Source
      .fromFile("data/students.txt")(Codec("utf-8"))

  }

}
